import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']

# 读取包含 KMeans 标签和输入变量的文件
df_with_labels = pd.read_csv("new_file_with_kmeans_labels.csv")

# 获取输入变量列
input_variables = ['Q2', 'Q3', 'Q4', 'Q5', 'Q6', 'Q10', 'Q11', 'Q12', 'Q13', 'Q14']

# 按照 KMeans 标签分组，并计算每个变量在每个聚类中的平均值
cluster_means = df_with_labels.groupby('tKMeans_Label')[input_variables].mean()

# 计算每个聚类中各变量的标准差，以反映差异
cluster_std = cluster_means.std()

# 选择差异最大的三个变量
top_three_variables = cluster_std.abs().nlargest(3).index

# 提取这三个变量的数据
cluster_means_top_three = cluster_means[top_three_variables]

# 将变量名称替换为中文
variable_names = {
    'Q2': '性别',
    'Q3': '年龄',
    'Q4': '学历',
    'Q5': '职业',
    'Q6': '可支配收入',
    'Q10': '了解程度',
    'Q11': '购买意愿',
    'Q12': '尝试购买',
    'Q13': '意义',
    'Q14': '宣传'
}

# 设置图形大小
plt.figure(figsize=(12, 8))

# 设置颜色
colors = sns.color_palette("husl", len(cluster_means))

# 遍历每个聚类并绘制柱状图
for label, data in cluster_means_top_three.iterrows():
    # 替换变量名
    data.index = [variable_names[var] for var in data.index]

    # 绘制柱状图
    plt.bar([x + label * 0.3 for x in range(len(data))], data, width=0.3, label=f'Cluster {label}', color=colors[label], edgecolor='black')

# 添加标题和标签
plt.title('差异最大的三类变量在不同聚类中的重要性对比')
plt.xlabel('变量')
plt.ylabel('变量重要性指标')

# 设置 x 轴标签
plt.xticks([x + 0.1 * (len(cluster_means_top_three) - 1) / 2 for x in range(len(data))], data.index)

# 显示图例
plt.legend()

# 显示图形
plt.show()
